Skip to content

Introduce morsel-driven Parquet scan#20481

Open
Dandandan wants to merge 68 commits intoapache:mainfrom
Dandandan:parquet-morsel-driven-execution-237164415184908839
Open

Introduce morsel-driven Parquet scan#20481
Dandandan wants to merge 68 commits intoapache:mainfrom
Dandandan:parquet-morsel-driven-execution-237164415184908839

Conversation

@Dandandan
Copy link
Contributor

@Dandandan Dandandan commented Feb 22, 2026

Which issue does this PR close?

TODO:

  • Make sure workqueue is closed after execute stream is dropped / not shared between two concurrent instances (major design issue)
  • Test changing planning again to only plan whole files instead of "early splitting" (got some slowdown on this - perhaps it removes some parallelism)
  • Update test to work with morsel setting enabled
  • Fix tests
  • Compare different approaches
  • Update docs
  • Simplify / address feedback

Rationale for this change

Current parelllization of Parquet scan is bounded by the thread that has the most data / is the slowest to execute, which means in the case of data skew (driven by either larger partitions or less selective filters during pruning / filter pushdown..., variable object store latency), the parallelism will be significantly limited.

We can change the strategy by morsel-driven parallelism like described in https://db.in.tum.de/~leis/papers/morsels.pdf.

Doing so is faster for a lot of queries, when there is an amount of skew (such as clickbench) and we have enough row filters to spread out the work.
For clickbench_partitioned / clickbench_pushdown it seems up to ~2x as fast for some queries, on a 10 core machine.

It seems to have almost no regressions, perhaps some due to different file scanning order(?) - so different statistics that can be used to prune and thus some minor variation.

Morsel-Driven Execution Architecture (partly claude-generated)

This branch implements a morsel-driven execution model for Parquet scans, based on the concept
from the Morsel-Driven Parallelism paper (Leis et al.). The core idea: instead of statically
assigning files to partitions, all work is pooled in a shared queue that all partition streams pull
from dynamically.

The Problem It Solves

In the traditional model, partition 0 might get a 1 GB file while partition 1 gets nothing --
partition 1 idles while 0 is busy. Currently we already try to statically spread out work to n partitions / threads based on stats (which works very well on perfectly distributed scans on SSDs (e.g. TPCH running locally), this doesn't work well when there is any data skew caused by any of those:

  • filters being more selective on part of the data
  • high variation in object store response times
  • overhead of filter pushdown + more serial/smaller reads and file operations

Morsel-driven execution prevents this by sharing work dynamically.

Key Types

ParquetMorsel -- datafusion/datasource-parquet/src/opener.rs:129

A morsel = one row group of a Parquet file. Stored as an extension on PartitionedFile.

  pub struct ParquetMorsel {
      pub metadata: Arc<ParquetMetaData>,   // cached, shared across morsels from same file
      pub access_plan: ParquetAccessPlan,   // which row groups to read
  }

WorkQueue -- datafusion/datasource/src/file_stream.rs:410

The shared, thread-safe queue. Each partition stream calls pull() which returns:

  • Work(file) -- here's a file/morsel to process
  • Wait -- queue is empty but workers are still morselizing (wait for notification)
  • Done -- all work consumed

MorselState -- datafusion/datasource/src/source.rs:240

Tracks the shared queue lifecycle. A new queue is created once per execution cycle when all
partition streams have opened.

struct MorselState {
    queue: Option<Arc<WorkQueue>>,
    streams_opened: usize,
    expected_streams: usize,
}

MorselizingGuard -- datafusion/datasource/src/file_stream.rs:49

RAII wrapper that atomically decrements morselizing_count when a worker finishes -- enabling
WorkStatus::Wait vs Done decisions.

FileOpener Trait Extension -- datafusion/datasource/src/file_stream.rs:498

A new morselize() method is added to FileOpener. The default implementation is a no-op
(returns the file as-is). ParquetOpener overrides it to split files by row group.

pub trait FileOpener {
    fn open(&self, file: PartitionedFile) -> Result<FileOpenFuture>;

    // NEW: split a file into morsels (default = no-op)
    fn morselize(&self, file: PartitionedFile)
        -> BoxFuture<'static, Result<Vec<PartitionedFile>>> { ... }
}

ParquetOpener::morselize() at opener.rs:232:

  1. Loads Parquet metadata once (shared via Arc across all resulting morsels)
  2. Applies file-level and row-group-level statistics pruning
  3. Returns one PartitionedFile per surviving row group, each carrying a ParquetMorsel extension

FileStream State Machine -- datafusion/datasource/src/file_stream.rs:141

The morsel-driven path adds two new states (Morselizing and Waiting):

  Idle
   +-- morsel_driven=true  -> queue.pull()
   |    +-- Work(file) -> Morselizing (run morselize())
   |    +-- Wait       -> Waiting (yield, wake on notify)
   |    +-- Done       -> return None
   +-- morsel_driven=false -> traditional local file_iter

  Morselizing
   +-- morsels > 1 -> push_many() back to queue -> Idle
   +-- morsel = 1  -> Open

  Waiting
   +-- notified -> Idle

Configuration

datafusion.execution.parquet.allow_morsel_driven -- datafusion/common/src/config.rs:748

Default: true. Can be disabled per-session.

FileScanConfig::morsel_driven -- datafusion/datasource/src/file_scan_config.rs:211

Automatically disabled when:

  • partitioned_by_file_group = true (breaks hash-partitioning guarantees)
  • preserve_order = true (breaks SortPreservingMerge guarantees)

Benchmark results

Summary: both clickbench, clickbench_partitioned

Details

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃          Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2445.21 ms │                                         2334.07 ms │       no change │
│ QQuery 1 │   984.42 ms │                                          831.92 ms │   +1.18x faster │
│ QQuery 2 │  1847.13 ms │                                         1609.38 ms │   +1.15x faster │
│ QQuery 3 │  1078.65 ms │                                          973.60 ms │   +1.11x faster │
│ QQuery 4 │  2279.11 ms │                                         2070.83 ms │   +1.10x faster │
│ QQuery 5 │ 26832.66 ms │                                        26954.54 ms │       no change │
│ QQuery 6 │  3852.58 ms │                                            8.28 ms │ +465.50x faster │
│ QQuery 7 │  2619.05 ms │                                         2547.13 ms │       no change │
└──────────┴─────────────┴────────────────────────────────────────────────────┴─────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 41938.81ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 37329.75ms │
│ Average Time (HEAD)                                               │  5242.35ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4666.22ms │
│ Queries Faster                                                    │          5 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          3 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.59 ms │                                            2.59 ms │     no change │
│ QQuery 1  │    52.70 ms │                                           53.83 ms │     no change │
│ QQuery 2  │   170.22 ms │                                          157.23 ms │ +1.08x faster │
│ QQuery 3  │   165.42 ms │                                          167.38 ms │     no change │
│ QQuery 4  │  1090.62 ms │                                         1035.57 ms │ +1.05x faster │
│ QQuery 5  │  1240.29 ms │                                         1229.64 ms │     no change │
│ QQuery 6  │     6.51 ms │                                            7.08 ms │  1.09x slower │
│ QQuery 7  │    49.50 ms │                                           60.72 ms │  1.23x slower │
│ QQuery 8  │  1388.32 ms │                                         1441.47 ms │     no change │
│ QQuery 9  │  1743.04 ms │                                         1723.40 ms │     no change │
│ QQuery 10 │   337.39 ms │                                          335.23 ms │     no change │
│ QQuery 11 │   386.04 ms │                                          380.30 ms │     no change │
│ QQuery 12 │  1183.09 ms │                                         1140.56 ms │     no change │
│ QQuery 13 │  1871.04 ms │                                         1609.71 ms │ +1.16x faster │
│ QQuery 14 │  1231.91 ms │                                         1158.10 ms │ +1.06x faster │
│ QQuery 15 │  1172.84 ms │                                         1210.94 ms │     no change │
│ QQuery 16 │  2418.93 ms │                                         2444.96 ms │     no change │
│ QQuery 17 │  2394.23 ms │                                         2427.85 ms │     no change │
│ QQuery 18 │  4803.83 ms │                                         4575.30 ms │     no change │
│ QQuery 19 │   123.68 ms │                                          124.92 ms │     no change │
│ QQuery 20 │  1849.23 ms │                                         1689.57 ms │ +1.09x faster │
│ QQuery 21 │  2137.19 ms │                                         1979.95 ms │ +1.08x faster │
│ QQuery 22 │  3705.39 ms │                                         3533.51 ms │     no change │
│ QQuery 23 │ 16569.27 ms │                                        12289.08 ms │ +1.35x faster │
│ QQuery 24 │   212.07 ms │                                          137.98 ms │ +1.54x faster │
│ QQuery 25 │   476.64 ms │                                          406.70 ms │ +1.17x faster │
│ QQuery 26 │   205.82 ms │                                          141.86 ms │ +1.45x faster │
│ QQuery 27 │  2643.51 ms │                                         2462.51 ms │ +1.07x faster │
│ QQuery 28 │ 23612.99 ms │                                        22934.78 ms │     no change │
│ QQuery 29 │  1037.09 ms │                                         1008.12 ms │     no change │
│ QQuery 30 │  1237.34 ms │                                         1236.45 ms │     no change │
│ QQuery 31 │  1316.76 ms │                                         1286.78 ms │     no change │
│ QQuery 32 │  4511.21 ms │                                         4096.49 ms │ +1.10x faster │
│ QQuery 33 │  5462.02 ms │                                         5437.33 ms │     no change │
│ QQuery 34 │  5792.16 ms │                                         5907.89 ms │     no change │
│ QQuery 35 │  1885.60 ms │                                         1896.64 ms │     no change │
│ QQuery 36 │   197.18 ms │                                          127.31 ms │ +1.55x faster │
│ QQuery 37 │    72.42 ms │                                           55.88 ms │ +1.30x faster │
│ QQuery 38 │   112.79 ms │                                           68.44 ms │ +1.65x faster │
│ QQuery 39 │   336.37 ms │                                          224.29 ms │ +1.50x faster │
│ QQuery 40 │    41.22 ms │                                           28.57 ms │ +1.44x faster │
│ QQuery 41 │    34.57 ms │                                           27.29 ms │ +1.27x faster │
│ QQuery 42 │    30.75 ms │                                           21.99 ms │ +1.40x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 95311.78ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 88286.18ms │
│ Average Time (HEAD)                                               │  2216.55ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  2053.17ms │
│ Queries Faster                                                    │         19 │
│ Queries Slower                                                    │          2 │
│ Queries with No Change                                            │         22 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 125.24 ms │                                          129.21 ms │     no change │
│ QQuery 2  │  33.04 ms │                                           32.48 ms │     no change │
│ QQuery 3  │  39.89 ms │                                           41.09 ms │     no change │
│ QQuery 4  │  34.35 ms │                                           35.63 ms │     no change │
│ QQuery 5  │  91.73 ms │                                           91.67 ms │     no change │
│ QQuery 6  │  23.21 ms │                                           20.64 ms │ +1.12x faster │
│ QQuery 7  │ 157.14 ms │                                          162.48 ms │     no change │
│ QQuery 8  │  40.93 ms │                                           42.22 ms │     no change │
│ QQuery 9  │ 111.58 ms │                                          115.04 ms │     no change │
│ QQuery 10 │  72.12 ms │                                           74.28 ms │     no change │
│ QQuery 11 │  18.96 ms │                                           19.11 ms │     no change │
│ QQuery 12 │  56.87 ms │                                           54.87 ms │     no change │
│ QQuery 13 │  55.66 ms │                                           54.46 ms │     no change │
│ QQuery 14 │  15.64 ms │                                           15.74 ms │     no change │
│ QQuery 15 │  34.30 ms │                                           34.93 ms │     no change │
│ QQuery 16 │  30.91 ms │                                           31.02 ms │     no change │
│ QQuery 17 │ 169.58 ms │                                          162.26 ms │     no change │
│ QQuery 18 │ 305.11 ms │                                          297.61 ms │     no change │
│ QQuery 19 │  48.79 ms │                                           53.73 ms │  1.10x slower │
│ QQuery 20 │  62.46 ms │                                           63.48 ms │     no change │
│ QQuery 21 │ 200.87 ms │                                          203.27 ms │     no change │
│ QQuery 22 │  24.72 ms │                                           23.78 ms │     no change │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1753.10ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1758.99ms │
│ Average Time (HEAD)                                               │   79.69ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   79.95ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         1 │
│ Queries with No Change                                            │        20 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

Acknowledgements

I heavily used AI (Jules / Claude) for this PR, but reviewed the code myself

google-labs-jules bot and others added 2 commits February 22, 2026 13:12
This PR implements morsel-driven execution for Parquet files in DataFusion, enabling row-group level work sharing across partitions to mitigate data skew.

Key changes:
- Introduced `WorkQueue` in `datafusion/datasource/src/file_stream.rs` for shared pool of work.
- Added `morselize` method to `FileOpener` trait to allow dynamic splitting of files into morsels.
- Implemented `morselize` for `ParquetOpener` to split files into individual row groups.
- Cached `ParquetMetaData` in `ParquetMorsel` extensions to avoid redundant I/O.
- Modified `FileStream` to support work stealing from the shared queue.
- Implemented `Weak` pointer pattern for `WorkQueue` in `FileScanConfig` to support plan re-executability.
- Added `MorselizingGuard` to ensure shared state consistency on cancellation.
- Added `allow_morsel_driven` configuration option (enabled by default for Parquet).
- Implemented row-group pruning during the morselization phase for better efficiency.

Tests:
- Added `parquet_morsel_driven_execution` test to verify work distribution and re-executability.
- Added `parquet_morsel_driven_enabled_by_default` to verify the default configuration.

Co-authored-by: Dandandan <163737+Dandandan@users.noreply.github.com>
@github-actions github-actions bot added core Core DataFusion crate common Related to common crate proto Related to proto crate datasource Changes to the datasource crate labels Feb 22, 2026
@Dandandan Dandandan changed the title PoC: Parquet morsel driven execution PoC: introduce morsel-driven parquet scan Feb 22, 2026
@Dandandan Dandandan changed the title PoC: introduce morsel-driven parquet scan Introduce morsel-driven parquet scan Feb 23, 2026
@Dandandan Dandandan changed the title Introduce morsel-driven parquet scan Introduce morsel-driven Parquet scan Feb 23, 2026
@Dandandan
Copy link
Contributor Author

run benchmarks

@github-actions github-actions bot added the documentation Improvements or additions to documentation label Feb 23, 2026
physical_plan
01)FilterExec: column1@0 != 42
02)--DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/repartition_scan/parquet_table/2.parquet:0..135], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/repartition_scan/parquet_table/2.parquet:135..270], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/repartition_scan/parquet_table/2.parquet:270..405], [WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/repartition_scan/parquet_table/2.parquet:405..537]]}, projection=[column1], file_type=parquet, predicate=column1@0 != 42, pruning_predicate=column1_null_count@2 != row_count@3 AND (column1_min@0 != 42 OR 42 != column1_max@1), required_guarantees=[column1 not in (42)]
02)--DataSourceExec: file_groups={4 groups: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/repartition_scan/parquet_table/2.parquet], [], [], []]}, projection=[column1], file_type=parquet, predicate=column1@0 != 42, pruning_predicate=column1_null_count@2 != row_count@3 AND (column1_min@0 != 42 OR 42 != column1_max@1), required_guarantees=[column1 not in (42)]
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We probably want to improve the display of DataSourceExec to only display the file names (instead of file groups).

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃         Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2299.13 ms │                                         2318.92 ms │      no change │
│ QQuery 1 │   924.51 ms │                                          821.96 ms │  +1.12x faster │
│ QQuery 2 │  1821.63 ms │                                         1646.92 ms │  +1.11x faster │
│ QQuery 3 │  1068.58 ms │                                          977.68 ms │  +1.09x faster │
│ QQuery 4 │  2224.11 ms │                                         2177.04 ms │      no change │
│ QQuery 5 │ 28169.20 ms │                                        28703.80 ms │      no change │
│ QQuery 6 │   116.33 ms │                                           11.37 ms │ +10.23x faster │
│ QQuery 7 │  2698.09 ms │                                         2533.39 ms │  +1.07x faster │
└──────────┴─────────────┴────────────────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 39321.58ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 39191.07ms │
│ Average Time (HEAD)                                               │  4915.20ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4898.88ms │
│ Queries Faster                                                    │          5 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          3 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.54 ms │                                            2.61 ms │     no change │
│ QQuery 1  │    52.49 ms │                                           53.30 ms │     no change │
│ QQuery 2  │   139.67 ms │                                          136.13 ms │     no change │
│ QQuery 3  │   159.08 ms │                                          155.78 ms │     no change │
│ QQuery 4  │  1006.69 ms │                                         1004.81 ms │     no change │
│ QQuery 5  │  1264.65 ms │                                         1177.24 ms │ +1.07x faster │
│ QQuery 6  │    18.40 ms │                                           10.99 ms │ +1.67x faster │
│ QQuery 7  │    70.90 ms │                                           67.30 ms │ +1.05x faster │
│ QQuery 8  │  1349.97 ms │                                         1378.31 ms │     no change │
│ QQuery 9  │  1709.75 ms │                                         1616.84 ms │ +1.06x faster │
│ QQuery 10 │   485.20 ms │                                          452.87 ms │ +1.07x faster │
│ QQuery 11 │   591.49 ms │                                          509.11 ms │ +1.16x faster │
│ QQuery 12 │  1359.26 ms │                                         1312.26 ms │     no change │
│ QQuery 13 │  2075.56 ms │                                         1875.06 ms │ +1.11x faster │
│ QQuery 14 │  1390.01 ms │                                         1315.90 ms │ +1.06x faster │
│ QQuery 15 │  1135.91 ms │                                         1160.23 ms │     no change │
│ QQuery 16 │  2474.97 ms │                                         2412.16 ms │     no change │
│ QQuery 17 │  2385.99 ms │                                         2420.65 ms │     no change │
│ QQuery 18 │  4816.44 ms │                                         4668.80 ms │     no change │
│ QQuery 19 │   147.61 ms │                                          140.19 ms │ +1.05x faster │
│ QQuery 20 │  1743.34 ms │                                         1636.89 ms │ +1.07x faster │
│ QQuery 21 │  2175.21 ms │                                         2115.83 ms │     no change │
│ QQuery 22 │  3740.54 ms │                                         3534.86 ms │ +1.06x faster │
│ QQuery 23 │  1078.00 ms │                                          720.54 ms │ +1.50x faster │
│ QQuery 24 │   244.67 ms │                                          149.29 ms │ +1.64x faster │
│ QQuery 25 │   640.39 ms │                                          583.57 ms │ +1.10x faster │
│ QQuery 26 │   349.44 ms │                                          219.65 ms │ +1.59x faster │
│ QQuery 27 │  2801.85 ms │                                         2532.99 ms │ +1.11x faster │
│ QQuery 28 │ 23993.63 ms │                                        23938.25 ms │     no change │
│ QQuery 29 │  1003.04 ms │                                          926.00 ms │ +1.08x faster │
│ QQuery 30 │  1239.74 ms │                                         1215.59 ms │     no change │
│ QQuery 31 │  1276.23 ms │                                         1254.01 ms │     no change │
│ QQuery 32 │  4212.58 ms │                                         4354.55 ms │     no change │
│ QQuery 33 │  5030.33 ms │                                         5217.60 ms │     no change │
│ QQuery 34 │  5586.39 ms │                                         5851.51 ms │     no change │
│ QQuery 35 │  1838.39 ms │                                         1762.45 ms │     no change │
│ QQuery 36 │   174.23 ms │                                          119.47 ms │ +1.46x faster │
│ QQuery 37 │    90.10 ms │                                           75.60 ms │ +1.19x faster │
│ QQuery 38 │    87.88 ms │                                           60.47 ms │ +1.45x faster │
│ QQuery 39 │   280.63 ms │                                          205.42 ms │ +1.37x faster │
│ QQuery 40 │    56.79 ms │                                           40.09 ms │ +1.42x faster │
│ QQuery 41 │    50.51 ms │                                           35.78 ms │ +1.41x faster │
│ QQuery 42 │    37.81 ms │                                           28.71 ms │ +1.32x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 80368.31ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 78449.66ms │
│ Average Time (HEAD)                                               │  1869.03ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  1824.41ms │
│ Queries Faster                                                    │         24 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │         19 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 120.08 ms │                                          118.80 ms │     no change │
│ QQuery 2  │  32.77 ms │                                           33.85 ms │     no change │
│ QQuery 3  │  39.62 ms │                                           42.53 ms │  1.07x slower │
│ QQuery 4  │  30.83 ms │                                           32.06 ms │     no change │
│ QQuery 5  │  94.35 ms │                                           97.64 ms │     no change │
│ QQuery 6  │  20.86 ms │                                           24.74 ms │  1.19x slower │
│ QQuery 7  │ 158.74 ms │                                          171.20 ms │  1.08x slower │
│ QQuery 8  │  40.89 ms │                                           43.01 ms │  1.05x slower │
│ QQuery 9  │  99.94 ms │                                          109.88 ms │  1.10x slower │
│ QQuery 10 │  72.02 ms │                                           69.42 ms │     no change │
│ QQuery 11 │  18.53 ms │                                           19.30 ms │     no change │
│ QQuery 12 │  54.32 ms │                                           57.29 ms │  1.05x slower │
│ QQuery 13 │  48.42 ms │                                           54.13 ms │  1.12x slower │
│ QQuery 14 │  14.94 ms │                                           14.92 ms │     no change │
│ QQuery 15 │  30.68 ms │                                           30.76 ms │     no change │
│ QQuery 16 │  29.59 ms │                                           29.97 ms │     no change │
│ QQuery 17 │ 156.04 ms │                                          163.17 ms │     no change │
│ QQuery 18 │ 286.82 ms │                                          289.95 ms │     no change │
│ QQuery 19 │  41.60 ms │                                           43.56 ms │     no change │
│ QQuery 20 │  60.35 ms │                                           56.38 ms │ +1.07x faster │
│ QQuery 21 │ 191.10 ms │                                          198.46 ms │     no change │
│ QQuery 22 │  23.30 ms │                                           25.43 ms │  1.09x slower │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1665.78ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1726.44ms │
│ Average Time (HEAD)                                               │   75.72ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   78.47ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         8 │
│ Queries with No Change                                            │        13 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

Stop the time_opening timer before transitioning back to Idle after
pushing morsels to the queue. Without this, re-entering Idle would
call start() on an already-running timer, triggering an assertion
failure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (8eda140) to 6713439 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃         Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2362.62 ms │                                         2439.84 ms │      no change │
│ QQuery 1 │   882.99 ms │                                          821.20 ms │  +1.08x faster │
│ QQuery 2 │  1699.89 ms │                                         1590.41 ms │  +1.07x faster │
│ QQuery 3 │  1061.60 ms │                                          958.98 ms │  +1.11x faster │
│ QQuery 4 │  2294.88 ms │                                         2146.90 ms │  +1.07x faster │
│ QQuery 5 │ 26394.62 ms │                                        26898.01 ms │      no change │
│ QQuery 6 │   123.97 ms │                                            9.73 ms │ +12.74x faster │
│ QQuery 7 │  2883.64 ms │                                         2860.25 ms │      no change │
└──────────┴─────────────┴────────────────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 37704.21ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 37725.32ms │
│ Average Time (HEAD)                                               │  4713.03ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4715.67ms │
│ Queries Faster                                                    │          5 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          3 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.56 ms │                                            2.72 ms │  1.06x slower │
│ QQuery 1  │    53.62 ms │                                           52.04 ms │     no change │
│ QQuery 2  │   163.24 ms │                                          155.48 ms │     no change │
│ QQuery 3  │   163.87 ms │                                          160.02 ms │     no change │
│ QQuery 4  │   964.26 ms │                                         1023.39 ms │  1.06x slower │
│ QQuery 5  │  1265.34 ms │                                         1161.26 ms │ +1.09x faster │
│ QQuery 6  │    23.12 ms │                                           11.77 ms │ +1.96x faster │
│ QQuery 7  │    65.94 ms │                                           68.90 ms │     no change │
│ QQuery 8  │  1359.10 ms │                                         1387.21 ms │     no change │
│ QQuery 9  │  1775.38 ms │                                         1633.53 ms │ +1.09x faster │
│ QQuery 10 │   474.78 ms │                                          432.36 ms │ +1.10x faster │
│ QQuery 11 │   515.73 ms │                                          482.63 ms │ +1.07x faster │
│ QQuery 12 │  1350.84 ms │                                         1264.15 ms │ +1.07x faster │
│ QQuery 13 │  2032.76 ms │                                         1784.89 ms │ +1.14x faster │
│ QQuery 14 │  1399.84 ms │                                         1298.31 ms │ +1.08x faster │
│ QQuery 15 │  1163.75 ms │                                         1183.34 ms │     no change │
│ QQuery 16 │  2447.49 ms │                                         2404.05 ms │     no change │
│ QQuery 17 │  2377.97 ms │                                         2391.42 ms │     no change │
│ QQuery 18 │  4987.17 ms │                                         4713.06 ms │ +1.06x faster │
│ QQuery 19 │   145.98 ms │                                          138.56 ms │ +1.05x faster │
│ QQuery 20 │  1837.79 ms │                                         1613.54 ms │ +1.14x faster │
│ QQuery 21 │  2244.75 ms │                                         2062.92 ms │ +1.09x faster │
│ QQuery 22 │  3966.51 ms │                                         3429.71 ms │ +1.16x faster │
│ QQuery 23 │  1098.44 ms │                                          800.27 ms │ +1.37x faster │
│ QQuery 24 │   246.99 ms │                                          135.66 ms │ +1.82x faster │
│ QQuery 25 │   627.83 ms │                                          539.89 ms │ +1.16x faster │
│ QQuery 26 │   332.86 ms │                                          194.76 ms │ +1.71x faster │
│ QQuery 27 │  2907.13 ms │                                         2561.78 ms │ +1.13x faster │
│ QQuery 28 │ 24101.52 ms │                                        23308.05 ms │     no change │
│ QQuery 29 │   974.19 ms │                                          914.88 ms │ +1.06x faster │
│ QQuery 30 │  1245.91 ms │                                         1182.03 ms │ +1.05x faster │
│ QQuery 31 │  1284.94 ms │                                         1223.17 ms │     no change │
│ QQuery 32 │  4493.74 ms │                                         4290.10 ms │     no change │
│ QQuery 33 │  5250.35 ms │                                         5672.18 ms │  1.08x slower │
│ QQuery 34 │  6273.23 ms │                                         6074.26 ms │     no change │
│ QQuery 35 │  1855.37 ms │                                         1777.63 ms │     no change │
│ QQuery 36 │   181.68 ms │                                          127.62 ms │ +1.42x faster │
│ QQuery 37 │    93.67 ms │                                           75.16 ms │ +1.25x faster │
│ QQuery 38 │    89.86 ms │                                           58.52 ms │ +1.54x faster │
│ QQuery 39 │   289.04 ms │                                          209.63 ms │ +1.38x faster │
│ QQuery 40 │    56.03 ms │                                           38.02 ms │ +1.47x faster │
│ QQuery 41 │    50.23 ms │                                           35.69 ms │ +1.41x faster │
│ QQuery 42 │    36.76 ms │                                           26.86 ms │ +1.37x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 82271.56ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 78101.39ms │
│ Average Time (HEAD)                                               │  1913.29ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  1816.31ms │
│ Queries Faster                                                    │         27 │
│ Queries Slower                                                    │          3 │
│ Queries with No Change                                            │         13 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 115.41 ms │                                          119.76 ms │     no change │
│ QQuery 2  │  31.90 ms │                                           31.64 ms │     no change │
│ QQuery 3  │  39.04 ms │                                           36.32 ms │ +1.07x faster │
│ QQuery 4  │  31.20 ms │                                           34.18 ms │  1.10x slower │
│ QQuery 5  │  83.91 ms │                                           86.59 ms │     no change │
│ QQuery 6  │  20.05 ms │                                           24.46 ms │  1.22x slower │
│ QQuery 7  │ 150.44 ms │                                          151.03 ms │     no change │
│ QQuery 8  │  40.30 ms │                                           40.74 ms │     no change │
│ QQuery 9  │ 106.39 ms │                                          103.44 ms │     no change │
│ QQuery 10 │  68.44 ms │                                           68.80 ms │     no change │
│ QQuery 11 │  18.18 ms │                                           18.24 ms │     no change │
│ QQuery 12 │  54.96 ms │                                           62.64 ms │  1.14x slower │
│ QQuery 13 │  49.48 ms │                                           49.76 ms │     no change │
│ QQuery 14 │  13.89 ms │                                           15.91 ms │  1.15x slower │
│ QQuery 15 │  29.11 ms │                                           29.46 ms │     no change │
│ QQuery 16 │  27.01 ms │                                           27.75 ms │     no change │
│ QQuery 17 │ 159.71 ms │                                          158.83 ms │     no change │
│ QQuery 18 │ 280.46 ms │                                          285.87 ms │     no change │
│ QQuery 19 │  45.57 ms │                                           47.06 ms │     no change │
│ QQuery 20 │  55.27 ms │                                           61.43 ms │  1.11x slower │
│ QQuery 21 │ 195.72 ms │                                          194.73 ms │     no change │
│ QQuery 22 │  24.14 ms │                                           24.55 ms │     no change │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1640.57ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1673.19ms │
│ Average Time (HEAD)                                               │   74.57ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   76.05ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         5 │
│ Queries with No Change                                            │        16 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

adriangb added a commit to pydantic/datafusion that referenced this pull request Mar 1, 2026
Combines morsel-driven Parquet scan (per-row-group work units) with
adaptive filter pushdown (selectivity-based filter placement).

Key merge decisions:
- morselize() uses combined predicate for coarse pruning (unchanged)
- open() uses predicate_conjuncts with selectivity tracker per morsel
- Proto field renumbered: filter_pushdown_min_bytes_per_sec 35 -> 42
  to avoid collision with allow_morsel_driven (field 35)
- SQL test outputs take morsel-driven plan format

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@adriangb
Copy link
Contributor

adriangb commented Mar 2, 2026

I tried merging this PR and #20363 together and am seeing some pretty amazing results: adriangb#2 (comment)

This makes sense logically: if we can optimize filter placements / layouts for every morsel instead of every file that makes the adaptive system much more responsive.

@adriangb
Copy link
Contributor

adriangb commented Mar 2, 2026

I want to test one alternative:
Instead of creating a (relatively) complex queue / synchronisation mechanism we could also do this:

* harness the partitions (i.e. each file/rowfilter = 1 partition)

* add another node which merges m input partitions (~morsel) into n target partitions (number of threads)

* just pull from different input partitions based on a atomic partition (round-robin style)

This is basically what we do in our system. We use a parallelism of 128 and then repartition that into num_threads. But this is more for the "I have 10k files" case, not the "I have 1 file and 12 cores" case.

I poked around a bit and came up with this: https://gist.github.com/adriangb/ae5c0ebc56d0e72a955cdbfe5dd7e23f

TLDR try to make a single mpmc pipeline of open -> moreselize -> read morsel <- partitions pull

@Dandandan
Copy link
Contributor Author

I want to test one alternative:
Instead of creating a (relatively) complex queue / synchronisation mechanism we could also do this:

* harness the partitions (i.e. each file/rowfilter = 1 partition)

* add another node which merges m input partitions (~morsel) into n target partitions (number of threads)

* just pull from different input partitions based on a atomic partition (round-robin style)

This is basically what we do in our system. We use a parallelism of 128 and then repartition that into num_threads. But this is more for the "I have 10k files" case, not the "I have 1 file and 12 cores" case.

I poked around a bit and came up with this: https://gist.github.com/adriangb/ae5c0ebc56d0e72a955cdbfe5dd7e23f

TLDR try to make a single mpmc pipeline of open -> moreselize -> read morsel <- partitions pull

Cool. I think there might be some "problems" with this approach.

Metadata fetches are
/// I/O-bound

I think this is probably retrieved from the code, but not really true in practice (metadata involves decoding / summarizing / ... as well).

I think there might be some benefits from the current approach in this PR:

  • we minimize the ParquetMetadata (with pages) in flight, if disabling cache it means we can make the memory overhead smaller when handling queries.
  • we have exact control over read order, e.g. now we read rowgroups globally in order. For object store we could change the strategy to e.g. interleave reading from different files (as object store (S3) does'nt like too much requests to the same file)
  • by having two queues of to morselize files and morsels we can introduce extra (bounded) concurrency later if we want

I am coming to the conclusion that the difference between:

  • morselize pre-splitted file and directly picking first rowgroup, pushing rest back on queue (faster for a few queries, up to 3.5x, but a few small regressions)
  • morselize entire files only, always pushing back to queue (current approach, seems to have no regressioms but some of the speedups are lower)

is mostly due to some randomness / luckiness of more selectiveness coming from particular files. I think we could probably look in the future more how to optimize file order / rowgroup order by picking the most "selective" files early as morsels, so dynamic filters become selective early with the least IO for next scans.

Sort at three levels so smaller/more-selective work is processed first,
letting dynamic filters tighten sooner and prune more data:

- Planning: sort files by statistics.num_rows before distribution
- WorkQueue::new: re-sort after round-robin interleaving
- push_morsels: keep the morsel queue globally sorted by estimated
  row count (set on each morsel in morselize())

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@Dandandan
Copy link
Contributor Author

run benchmarks
DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS=true
DATAFUSION_EXECUTION_PARQUET_REORDER_FILTERS=true

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (afd2936) to 6713439 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@Dandandan
Copy link
Contributor Author

I'll try some small experiments but mostly focus on

  • fix currently failing tests
  • cleanup / refactoring
  • documentation
  • adding some tests where needed
  • optimize plan display when morselize is enabled

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃         Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2233.85 ms │                                         2311.16 ms │      no change │
│ QQuery 1 │   881.42 ms │                                          872.05 ms │      no change │
│ QQuery 2 │  1772.07 ms │                                         1695.62 ms │      no change │
│ QQuery 3 │  1036.25 ms │                                          958.13 ms │  +1.08x faster │
│ QQuery 4 │  2177.85 ms │                                         2270.64 ms │      no change │
│ QQuery 5 │ 26157.11 ms │                                        26984.39 ms │      no change │
│ QQuery 6 │   126.94 ms │                                            8.78 ms │ +14.46x faster │
│ QQuery 7 │  2621.61 ms │                                         2591.13 ms │      no change │
└──────────┴─────────────┴────────────────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 37007.09ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 37691.90ms │
│ Average Time (HEAD)                                               │  4625.89ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4711.49ms │
│ Queries Faster                                                    │          2 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          6 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.70 ms │                                            2.61 ms │     no change │
│ QQuery 1  │    50.52 ms │                                           52.97 ms │     no change │
│ QQuery 2  │   164.11 ms │                                          158.28 ms │     no change │
│ QQuery 3  │   161.96 ms │                                          159.06 ms │     no change │
│ QQuery 4  │   963.69 ms │                                          982.40 ms │     no change │
│ QQuery 5  │  1254.46 ms │                                         1159.54 ms │ +1.08x faster │
│ QQuery 6  │    21.78 ms │                                           14.18 ms │ +1.54x faster │
│ QQuery 7  │    68.86 ms │                                           66.84 ms │     no change │
│ QQuery 8  │  1354.03 ms │                                         1336.16 ms │     no change │
│ QQuery 9  │  1757.82 ms │                                         1630.72 ms │ +1.08x faster │
│ QQuery 10 │   461.32 ms │                                          425.99 ms │ +1.08x faster │
│ QQuery 11 │   512.75 ms │                                          466.11 ms │ +1.10x faster │
│ QQuery 12 │  1343.03 ms │                                         1230.51 ms │ +1.09x faster │
│ QQuery 13 │  1968.99 ms │                                         1678.02 ms │ +1.17x faster │
│ QQuery 14 │  1369.49 ms │                                         1247.70 ms │ +1.10x faster │
│ QQuery 15 │  1127.43 ms │                                         1126.38 ms │     no change │
│ QQuery 16 │  2321.56 ms │                                         2294.79 ms │     no change │
│ QQuery 17 │  2327.49 ms │                                         2316.48 ms │     no change │
│ QQuery 18 │  4699.14 ms │                                         4497.98 ms │     no change │
│ QQuery 19 │   145.19 ms │                                          140.11 ms │     no change │
│ QQuery 20 │  1809.33 ms │                                         1500.01 ms │ +1.21x faster │
│ QQuery 21 │  2223.60 ms │                                         1988.19 ms │ +1.12x faster │
│ QQuery 22 │  3780.59 ms │                                         3284.36 ms │ +1.15x faster │
│ QQuery 23 │  1087.75 ms │                                          508.98 ms │ +2.14x faster │
│ QQuery 24 │   249.16 ms │                                          161.39 ms │ +1.54x faster │
│ QQuery 25 │   619.69 ms │                                          543.68 ms │ +1.14x faster │
│ QQuery 26 │   328.46 ms │                                          224.65 ms │ +1.46x faster │
│ QQuery 27 │  2911.05 ms │                                         2488.81 ms │ +1.17x faster │
│ QQuery 28 │ 23882.89 ms │                                        23746.48 ms │     no change │
│ QQuery 29 │   978.25 ms │                                          929.70 ms │     no change │
│ QQuery 30 │  1242.27 ms │                                         1169.19 ms │ +1.06x faster │
│ QQuery 31 │  1297.13 ms │                                         1200.04 ms │ +1.08x faster │
│ QQuery 32 │  4209.50 ms │                                         4380.63 ms │     no change │
│ QQuery 33 │  5223.48 ms │                                         5074.57 ms │     no change │
│ QQuery 34 │  5760.18 ms │                                         5683.32 ms │     no change │
│ QQuery 35 │  1831.18 ms │                                         1774.99 ms │     no change │
│ QQuery 36 │   174.08 ms │                                          122.94 ms │ +1.42x faster │
│ QQuery 37 │    88.93 ms │                                           68.08 ms │ +1.31x faster │
│ QQuery 38 │    89.63 ms │                                           63.98 ms │ +1.40x faster │
│ QQuery 39 │   270.55 ms │                                          200.06 ms │ +1.35x faster │
│ QQuery 40 │    58.18 ms │                                           43.62 ms │ +1.33x faster │
│ QQuery 41 │    49.70 ms │                                           37.79 ms │ +1.32x faster │
│ QQuery 42 │    36.96 ms │                                           28.81 ms │ +1.28x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 80278.87ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 76211.09ms │
│ Average Time (HEAD)                                               │  1866.95ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  1772.35ms │
│ Queries Faster                                                    │         25 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │         18 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 118.39 ms │                                          118.89 ms │     no change │
│ QQuery 2  │  31.18 ms │                                           31.80 ms │     no change │
│ QQuery 3  │  34.76 ms │                                           38.15 ms │  1.10x slower │
│ QQuery 4  │  30.93 ms │                                           30.35 ms │     no change │
│ QQuery 5  │  86.11 ms │                                           82.04 ms │     no change │
│ QQuery 6  │  20.15 ms │                                           24.31 ms │  1.21x slower │
│ QQuery 7  │ 148.30 ms │                                          145.64 ms │     no change │
│ QQuery 8  │  40.61 ms │                                           38.74 ms │     no change │
│ QQuery 9  │  98.75 ms │                                          102.80 ms │     no change │
│ QQuery 10 │  65.43 ms │                                           68.27 ms │     no change │
│ QQuery 11 │  18.52 ms │                                           19.26 ms │     no change │
│ QQuery 12 │  64.68 ms │                                           58.47 ms │ +1.11x faster │
│ QQuery 13 │  49.96 ms │                                           50.81 ms │     no change │
│ QQuery 14 │  14.80 ms │                                           15.09 ms │     no change │
│ QQuery 15 │  29.79 ms │                                           33.40 ms │  1.12x slower │
│ QQuery 16 │  27.14 ms │                                           28.89 ms │  1.06x slower │
│ QQuery 17 │ 150.79 ms │                                          156.35 ms │     no change │
│ QQuery 18 │ 277.83 ms │                                          288.69 ms │     no change │
│ QQuery 19 │  41.20 ms │                                           45.72 ms │  1.11x slower │
│ QQuery 20 │  54.97 ms │                                           58.62 ms │  1.07x slower │
│ QQuery 21 │ 192.98 ms │                                          192.71 ms │     no change │
│ QQuery 22 │  22.36 ms │                                           24.68 ms │  1.10x slower │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1619.64ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1653.67ms │
│ Average Time (HEAD)                                               │   73.62ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   75.17ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         7 │
│ Queries with No Change                                            │        14 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

@Dandandan
Copy link
Contributor Author

run benchmarks
DATAFUSION_EXECUTION_PARQUET_PUSHDOWN_FILTERS=true
DATAFUSION_EXECUTION_PARQUET_REORDER_FILTERS=true

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (e31bf97) to 6713439 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@Dandandan
Copy link
Contributor Author

run benchmarks

@Dandandan
Copy link
Contributor Author

Dandandan commented Mar 2, 2026

run benchmark tpch tpcds

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃         Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2386.10 ms │                                         2484.04 ms │      no change │
│ QQuery 1 │   959.80 ms │                                          906.45 ms │  +1.06x faster │
│ QQuery 2 │  1786.94 ms │                                         1718.99 ms │      no change │
│ QQuery 3 │  1100.97 ms │                                         1047.21 ms │      no change │
│ QQuery 4 │  2280.46 ms │                                         2231.56 ms │      no change │
│ QQuery 5 │ 26515.09 ms │                                        27053.41 ms │      no change │
│ QQuery 6 │   133.27 ms │                                            8.59 ms │ +15.52x faster │
│ QQuery 7 │  2699.76 ms │                                         2681.11 ms │      no change │
└──────────┴─────────────┴────────────────────────────────────────────────────┴────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 37862.39ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 38131.36ms │
│ Average Time (HEAD)                                               │  4732.80ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4766.42ms │
│ Queries Faster                                                    │          2 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          6 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.55 ms │                                            2.61 ms │     no change │
│ QQuery 1  │    53.48 ms │                                           57.12 ms │  1.07x slower │
│ QQuery 2  │   172.22 ms │                                          156.47 ms │ +1.10x faster │
│ QQuery 3  │   163.86 ms │                                          163.79 ms │     no change │
│ QQuery 4  │   981.30 ms │                                         1021.82 ms │     no change │
│ QQuery 5  │  1260.27 ms │                                         1194.00 ms │ +1.06x faster │
│ QQuery 6  │    22.77 ms │                                           12.24 ms │ +1.86x faster │
│ QQuery 7  │    65.71 ms │                                           70.83 ms │  1.08x slower │
│ QQuery 8  │  1372.54 ms │                                         1382.04 ms │     no change │
│ QQuery 9  │  1761.73 ms │                                         1680.88 ms │     no change │
│ QQuery 10 │   474.34 ms │                                          461.71 ms │     no change │
│ QQuery 11 │   525.44 ms │                                          508.34 ms │     no change │
│ QQuery 12 │  1370.03 ms │                                         1315.84 ms │     no change │
│ QQuery 13 │  1995.47 ms │                                         1956.39 ms │     no change │
│ QQuery 14 │  1398.52 ms │                                         1342.85 ms │     no change │
│ QQuery 15 │  1153.41 ms │                                         1205.85 ms │     no change │
│ QQuery 16 │  2356.93 ms │                                         2416.47 ms │     no change │
│ QQuery 17 │  2330.93 ms │                                         2393.19 ms │     no change │
│ QQuery 18 │  4503.79 ms │                                         4546.86 ms │     no change │
│ QQuery 19 │   142.84 ms │                                          145.53 ms │     no change │
│ QQuery 20 │  1811.05 ms │                                         1644.98 ms │ +1.10x faster │
│ QQuery 21 │  2271.09 ms │                                         2127.71 ms │ +1.07x faster │
│ QQuery 22 │  3829.61 ms │                                         3561.28 ms │ +1.08x faster │
│ QQuery 23 │  1074.54 ms │                                          829.71 ms │ +1.30x faster │
│ QQuery 24 │   246.32 ms │                                          141.42 ms │ +1.74x faster │
│ QQuery 25 │   618.99 ms │                                          597.22 ms │     no change │
│ QQuery 26 │   347.91 ms │                                          198.97 ms │ +1.75x faster │
│ QQuery 27 │  2843.63 ms │                                         2670.15 ms │ +1.06x faster │
│ QQuery 28 │ 24124.32 ms │                                        23327.96 ms │     no change │
│ QQuery 29 │   986.21 ms │                                         1007.76 ms │     no change │
│ QQuery 30 │  1236.35 ms │                                         1262.65 ms │     no change │
│ QQuery 31 │  1314.42 ms │                                         1298.37 ms │     no change │
│ QQuery 32 │  4229.72 ms │                                         3888.54 ms │ +1.09x faster │
│ QQuery 33 │  5098.72 ms │                                         5181.54 ms │     no change │
│ QQuery 34 │  5923.05 ms │                                         6334.27 ms │  1.07x slower │
│ QQuery 35 │  1825.07 ms │                                         1869.69 ms │     no change │
│ QQuery 36 │   182.43 ms │                                          122.76 ms │ +1.49x faster │
│ QQuery 37 │    88.99 ms │                                           66.89 ms │ +1.33x faster │
│ QQuery 38 │    88.52 ms │                                           61.35 ms │ +1.44x faster │
│ QQuery 39 │   301.05 ms │                                          212.27 ms │ +1.42x faster │
│ QQuery 40 │    57.47 ms │                                           39.69 ms │ +1.45x faster │
│ QQuery 41 │    50.02 ms │                                           34.41 ms │ +1.45x faster │
│ QQuery 42 │    37.21 ms │                                           26.99 ms │ +1.38x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 80694.84ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 78541.44ms │
│ Average Time (HEAD)                                               │  1876.62ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  1826.55ms │
│ Queries Faster                                                    │         18 │
│ Queries Slower                                                    │          3 │
│ Queries with No Change                                            │         22 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 118.08 ms │                                          114.08 ms │     no change │
│ QQuery 2  │  30.33 ms │                                           31.59 ms │     no change │
│ QQuery 3  │  39.82 ms │                                           36.30 ms │ +1.10x faster │
│ QQuery 4  │  34.75 ms │                                           30.83 ms │ +1.13x faster │
│ QQuery 5  │  87.65 ms │                                           85.81 ms │     no change │
│ QQuery 6  │  20.23 ms │                                           23.79 ms │  1.18x slower │
│ QQuery 7  │ 155.61 ms │                                          155.22 ms │     no change │
│ QQuery 8  │  41.93 ms │                                           42.67 ms │     no change │
│ QQuery 9  │ 102.79 ms │                                          105.42 ms │     no change │
│ QQuery 10 │  67.94 ms │                                           69.09 ms │     no change │
│ QQuery 11 │  18.65 ms │                                           18.33 ms │     no change │
│ QQuery 12 │  64.36 ms │                                           55.46 ms │ +1.16x faster │
│ QQuery 13 │  49.62 ms │                                           49.51 ms │     no change │
│ QQuery 14 │  15.36 ms │                                           15.89 ms │     no change │
│ QQuery 15 │  28.96 ms │                                           31.08 ms │  1.07x slower │
│ QQuery 16 │  29.51 ms │                                           28.38 ms │     no change │
│ QQuery 17 │ 157.11 ms │                                          157.86 ms │     no change │
│ QQuery 18 │ 290.47 ms │                                          283.60 ms │     no change │
│ QQuery 19 │  42.96 ms │                                           45.27 ms │  1.05x slower │
│ QQuery 20 │  54.44 ms │                                           59.26 ms │  1.09x slower │
│ QQuery 21 │ 193.40 ms │                                          200.68 ms │     no change │
│ QQuery 22 │  23.40 ms │                                           23.25 ms │     no change │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1667.40ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1663.38ms │
│ Average Time (HEAD)                                               │   75.79ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   75.61ms │
│ Queries Faster                                                    │         3 │
│ Queries Slower                                                    │         4 │
│ Queries with No Change                                            │        15 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (e31bf97) to 6713439 diff using: tpch_mem clickbench_partitioned clickbench_extended
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark clickbench_extended.json
--------------------
┏━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┓
┃ Query    ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃          Change ┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━┩
│ QQuery 0 │  2445.21 ms │                                         2334.07 ms │       no change │
│ QQuery 1 │   984.42 ms │                                          831.92 ms │   +1.18x faster │
│ QQuery 2 │  1847.13 ms │                                         1609.38 ms │   +1.15x faster │
│ QQuery 3 │  1078.65 ms │                                          973.60 ms │   +1.11x faster │
│ QQuery 4 │  2279.11 ms │                                         2070.83 ms │   +1.10x faster │
│ QQuery 5 │ 26832.66 ms │                                        26954.54 ms │       no change │
│ QQuery 6 │  3852.58 ms │                                            8.28 ms │ +465.50x faster │
│ QQuery 7 │  2619.05 ms │                                         2547.13 ms │       no change │
└──────────┴─────────────┴────────────────────────────────────────────────────┴─────────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 41938.81ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 37329.75ms │
│ Average Time (HEAD)                                               │  5242.35ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  4666.22ms │
│ Queries Faster                                                    │          5 │
│ Queries Slower                                                    │          0 │
│ Queries with No Change                                            │          3 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark clickbench_partitioned.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 0  │     2.59 ms │                                            2.59 ms │     no change │
│ QQuery 1  │    52.70 ms │                                           53.83 ms │     no change │
│ QQuery 2  │   170.22 ms │                                          157.23 ms │ +1.08x faster │
│ QQuery 3  │   165.42 ms │                                          167.38 ms │     no change │
│ QQuery 4  │  1090.62 ms │                                         1035.57 ms │ +1.05x faster │
│ QQuery 5  │  1240.29 ms │                                         1229.64 ms │     no change │
│ QQuery 6  │     6.51 ms │                                            7.08 ms │  1.09x slower │
│ QQuery 7  │    49.50 ms │                                           60.72 ms │  1.23x slower │
│ QQuery 8  │  1388.32 ms │                                         1441.47 ms │     no change │
│ QQuery 9  │  1743.04 ms │                                         1723.40 ms │     no change │
│ QQuery 10 │   337.39 ms │                                          335.23 ms │     no change │
│ QQuery 11 │   386.04 ms │                                          380.30 ms │     no change │
│ QQuery 12 │  1183.09 ms │                                         1140.56 ms │     no change │
│ QQuery 13 │  1871.04 ms │                                         1609.71 ms │ +1.16x faster │
│ QQuery 14 │  1231.91 ms │                                         1158.10 ms │ +1.06x faster │
│ QQuery 15 │  1172.84 ms │                                         1210.94 ms │     no change │
│ QQuery 16 │  2418.93 ms │                                         2444.96 ms │     no change │
│ QQuery 17 │  2394.23 ms │                                         2427.85 ms │     no change │
│ QQuery 18 │  4803.83 ms │                                         4575.30 ms │     no change │
│ QQuery 19 │   123.68 ms │                                          124.92 ms │     no change │
│ QQuery 20 │  1849.23 ms │                                         1689.57 ms │ +1.09x faster │
│ QQuery 21 │  2137.19 ms │                                         1979.95 ms │ +1.08x faster │
│ QQuery 22 │  3705.39 ms │                                         3533.51 ms │     no change │
│ QQuery 23 │ 16569.27 ms │                                        12289.08 ms │ +1.35x faster │
│ QQuery 24 │   212.07 ms │                                          137.98 ms │ +1.54x faster │
│ QQuery 25 │   476.64 ms │                                          406.70 ms │ +1.17x faster │
│ QQuery 26 │   205.82 ms │                                          141.86 ms │ +1.45x faster │
│ QQuery 27 │  2643.51 ms │                                         2462.51 ms │ +1.07x faster │
│ QQuery 28 │ 23612.99 ms │                                        22934.78 ms │     no change │
│ QQuery 29 │  1037.09 ms │                                         1008.12 ms │     no change │
│ QQuery 30 │  1237.34 ms │                                         1236.45 ms │     no change │
│ QQuery 31 │  1316.76 ms │                                         1286.78 ms │     no change │
│ QQuery 32 │  4511.21 ms │                                         4096.49 ms │ +1.10x faster │
│ QQuery 33 │  5462.02 ms │                                         5437.33 ms │     no change │
│ QQuery 34 │  5792.16 ms │                                         5907.89 ms │     no change │
│ QQuery 35 │  1885.60 ms │                                         1896.64 ms │     no change │
│ QQuery 36 │   197.18 ms │                                          127.31 ms │ +1.55x faster │
│ QQuery 37 │    72.42 ms │                                           55.88 ms │ +1.30x faster │
│ QQuery 38 │   112.79 ms │                                           68.44 ms │ +1.65x faster │
│ QQuery 39 │   336.37 ms │                                          224.29 ms │ +1.50x faster │
│ QQuery 40 │    41.22 ms │                                           28.57 ms │ +1.44x faster │
│ QQuery 41 │    34.57 ms │                                           27.29 ms │ +1.27x faster │
│ QQuery 42 │    30.75 ms │                                           21.99 ms │ +1.40x faster │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 95311.78ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 88286.18ms │
│ Average Time (HEAD)                                               │  2216.55ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  2053.17ms │
│ Queries Faster                                                    │         19 │
│ Queries Slower                                                    │          2 │
│ Queries with No Change                                            │         22 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘
--------------------
Benchmark tpch_mem_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 125.24 ms │                                          129.21 ms │     no change │
│ QQuery 2  │  33.04 ms │                                           32.48 ms │     no change │
│ QQuery 3  │  39.89 ms │                                           41.09 ms │     no change │
│ QQuery 4  │  34.35 ms │                                           35.63 ms │     no change │
│ QQuery 5  │  91.73 ms │                                           91.67 ms │     no change │
│ QQuery 6  │  23.21 ms │                                           20.64 ms │ +1.12x faster │
│ QQuery 7  │ 157.14 ms │                                          162.48 ms │     no change │
│ QQuery 8  │  40.93 ms │                                           42.22 ms │     no change │
│ QQuery 9  │ 111.58 ms │                                          115.04 ms │     no change │
│ QQuery 10 │  72.12 ms │                                           74.28 ms │     no change │
│ QQuery 11 │  18.96 ms │                                           19.11 ms │     no change │
│ QQuery 12 │  56.87 ms │                                           54.87 ms │     no change │
│ QQuery 13 │  55.66 ms │                                           54.46 ms │     no change │
│ QQuery 14 │  15.64 ms │                                           15.74 ms │     no change │
│ QQuery 15 │  34.30 ms │                                           34.93 ms │     no change │
│ QQuery 16 │  30.91 ms │                                           31.02 ms │     no change │
│ QQuery 17 │ 169.58 ms │                                          162.26 ms │     no change │
│ QQuery 18 │ 305.11 ms │                                          297.61 ms │     no change │
│ QQuery 19 │  48.79 ms │                                           53.73 ms │  1.10x slower │
│ QQuery 20 │  62.46 ms │                                           63.48 ms │     no change │
│ QQuery 21 │ 200.87 ms │                                          203.27 ms │     no change │
│ QQuery 22 │  24.72 ms │                                           23.78 ms │     no change │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 1753.10ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 1758.99ms │
│ Average Time (HEAD)                                               │   79.69ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   79.95ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         1 │
│ Queries with No Change                                            │        20 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

@Dandandan
Copy link
Contributor Author

│ QQuery 6 │ 3852.58 ms │ 8.28 ms │ +465.50x faster │

Nice 🚀🚀🚀🚀

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (e31bf97) to 6713439 diff using: tpch
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark tpch_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃      HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │ 181.32 ms │                                          192.34 ms │  1.06x slower │
│ QQuery 2  │  80.72 ms │                                           81.73 ms │     no change │
│ QQuery 3  │ 121.72 ms │                                          121.70 ms │     no change │
│ QQuery 4  │  82.21 ms │                                           77.22 ms │ +1.06x faster │
│ QQuery 5  │ 175.44 ms │                                          172.87 ms │     no change │
│ QQuery 6  │  66.05 ms │                                           64.63 ms │     no change │
│ QQuery 7  │ 205.96 ms │                                          211.76 ms │     no change │
│ QQuery 8  │ 165.76 ms │                                          164.33 ms │     no change │
│ QQuery 9  │ 234.50 ms │                                          233.03 ms │     no change │
│ QQuery 10 │ 186.98 ms │                                          184.98 ms │     no change │
│ QQuery 11 │  59.13 ms │                                           56.69 ms │     no change │
│ QQuery 12 │ 115.48 ms │                                          115.15 ms │     no change │
│ QQuery 13 │ 233.97 ms │                                          224.56 ms │     no change │
│ QQuery 14 │  87.74 ms │                                           92.40 ms │  1.05x slower │
│ QQuery 15 │ 120.45 ms │                                          120.17 ms │     no change │
│ QQuery 16 │  58.44 ms │                                           59.27 ms │     no change │
│ QQuery 17 │ 269.37 ms │                                          262.24 ms │     no change │
│ QQuery 18 │ 318.44 ms │                                          316.09 ms │     no change │
│ QQuery 19 │ 125.63 ms │                                          137.47 ms │  1.09x slower │
│ QQuery 20 │ 127.44 ms │                                          124.13 ms │     no change │
│ QQuery 21 │ 250.42 ms │                                          249.03 ms │     no change │
│ QQuery 22 │  37.99 ms │                                           41.28 ms │  1.09x slower │
└───────────┴───────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃           ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 3305.16ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 3303.08ms │
│ Average Time (HEAD)                                               │  150.23ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │  150.14ms │
│ Queries Faster                                                    │         1 │
│ Queries Slower                                                    │         4 │
│ Queries with No Change                                            │        17 │
│ Queries with Failure                                              │         0 │
└───────────────────────────────────────────────────────────────────┴───────────┘

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (e31bf97) to 6713439 diff using: tpcds
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │    72.10 ms │                                           73.89 ms │     no change │
│ QQuery 2  │   228.35 ms │                                          248.27 ms │  1.09x slower │
│ QQuery 3  │   159.46 ms │                                          153.54 ms │     no change │
│ QQuery 4  │  1835.90 ms │                                         1904.77 ms │     no change │
│ QQuery 5  │   262.63 ms │                                          260.29 ms │     no change │
│ QQuery 6  │  1438.58 ms │                                         1257.03 ms │ +1.14x faster │
│ QQuery 7  │   512.69 ms │                                          527.75 ms │     no change │
│ QQuery 8  │   175.13 ms │                                          168.71 ms │     no change │
│ QQuery 9  │   313.25 ms │                                          312.20 ms │     no change │
│ QQuery 10 │   172.91 ms │                                          174.04 ms │     no change │
│ QQuery 11 │  1270.57 ms │                                         1249.42 ms │     no change │
│ QQuery 12 │    67.36 ms │                                           69.71 ms │     no change │
│ QQuery 13 │   544.00 ms │                                          584.04 ms │  1.07x slower │
│ QQuery 14 │  1939.67 ms │                                         1861.03 ms │     no change │
│ QQuery 15 │    29.29 ms │                                           29.30 ms │     no change │
│ QQuery 16 │    66.04 ms │                                           64.52 ms │     no change │
│ QQuery 17 │   368.97 ms │                                          365.48 ms │     no change │
│ QQuery 18 │   191.93 ms │                                          226.46 ms │  1.18x slower │
│ QQuery 19 │   216.48 ms │                                          214.18 ms │     no change │
│ QQuery 20 │    23.00 ms │                                           24.55 ms │  1.07x slower │
│ QQuery 21 │    36.62 ms │                                           37.34 ms │     no change │
│ QQuery 22 │   701.77 ms │                                          741.19 ms │  1.06x slower │
│ QQuery 23 │  1787.25 ms │                                         2091.42 ms │  1.17x slower │
│ QQuery 24 │   682.14 ms │                                          677.89 ms │     no change │
│ QQuery 25 │   538.10 ms │                                          528.36 ms │     no change │
│ QQuery 26 │   129.24 ms │                                          130.17 ms │     no change │
│ QQuery 27 │   513.59 ms │                                          510.03 ms │     no change │
│ QQuery 28 │   318.75 ms │                                          334.81 ms │  1.05x slower │
│ QQuery 29 │   463.99 ms │                                          446.55 ms │     no change │
│ QQuery 30 │    72.52 ms │                                           78.92 ms │  1.09x slower │
│ QQuery 31 │   322.24 ms │                                          329.81 ms │     no change │
│ QQuery 32 │    81.48 ms │                                           81.69 ms │     no change │
│ QQuery 33 │   210.08 ms │                                          208.20 ms │     no change │
│ QQuery 34 │   162.90 ms │                                          152.48 ms │ +1.07x faster │
│ QQuery 35 │   183.10 ms │                                          196.22 ms │  1.07x slower │
│ QQuery 36 │   287.08 ms │                                          297.93 ms │     no change │
│ QQuery 37 │   258.23 ms │                                          245.68 ms │     no change │
│ QQuery 38 │   161.52 ms │                                          196.88 ms │  1.22x slower │
│ QQuery 39 │   199.94 ms │                                          193.48 ms │     no change │
│ QQuery 40 │   185.43 ms │                                          179.12 ms │     no change │
│ QQuery 41 │    29.20 ms │                                           30.52 ms │     no change │
│ QQuery 42 │   149.22 ms │                                          143.29 ms │     no change │
│ QQuery 43 │   130.89 ms │                                          122.29 ms │ +1.07x faster │
│ QQuery 44 │    28.88 ms │                                           26.32 ms │ +1.10x faster │
│ QQuery 45 │    86.40 ms │                                           86.72 ms │     no change │
│ QQuery 46 │   339.99 ms │                                          312.27 ms │ +1.09x faster │
│ QQuery 47 │  1071.12 ms │                                         1010.90 ms │ +1.06x faster │
│ QQuery 48 │   421.38 ms │                                          442.52 ms │  1.05x slower │
│ QQuery 49 │   378.42 ms │                                          374.84 ms │     no change │
│ QQuery 50 │   352.70 ms │                                          353.51 ms │     no change │
│ QQuery 51 │   315.49 ms │                                          315.21 ms │     no change │
│ QQuery 52 │   149.07 ms │                                          144.14 ms │     no change │
│ QQuery 53 │   150.01 ms │                                          145.38 ms │     no change │
│ QQuery 54 │   208.61 ms │                                          201.73 ms │     no change │
│ QQuery 55 │   149.11 ms │                                          142.63 ms │     no change │
│ QQuery 56 │   210.66 ms │                                          201.47 ms │     no change │
│ QQuery 57 │   293.94 ms │                                          278.26 ms │ +1.06x faster │
│ QQuery 58 │   501.16 ms │                                          488.14 ms │     no change │
│ QQuery 59 │   322.77 ms │                                          326.47 ms │     no change │
│ QQuery 60 │   216.68 ms │                                          214.47 ms │     no change │
│ QQuery 61 │   249.78 ms │                                          240.25 ms │     no change │
│ QQuery 62 │  1378.97 ms │                                         1402.90 ms │     no change │
│ QQuery 63 │   147.97 ms │                                          144.77 ms │     no change │
│ QQuery 64 │  1177.54 ms │                                         1230.38 ms │     no change │
│ QQuery 65 │   363.24 ms │                                          348.75 ms │     no change │
│ QQuery 66 │   400.19 ms │                                          412.81 ms │     no change │
│ QQuery 67 │   547.01 ms │                                          781.42 ms │  1.43x slower │
│ QQuery 68 │   384.94 ms │                                          373.10 ms │     no change │
│ QQuery 69 │   165.02 ms │                                          164.56 ms │     no change │
│ QQuery 70 │   505.33 ms │                                          477.60 ms │ +1.06x faster │
│ QQuery 71 │   189.65 ms │                                          184.15 ms │     no change │
│ QQuery 72 │  2125.06 ms │                                         2129.79 ms │     no change │
│ QQuery 73 │   159.06 ms │                                          148.12 ms │ +1.07x faster │
│ QQuery 74 │   822.02 ms │                                          791.25 ms │     no change │
│ QQuery 75 │   407.18 ms │                                          420.99 ms │     no change │
│ QQuery 76 │   186.51 ms │                                          176.04 ms │ +1.06x faster │
│ QQuery 77 │   281.50 ms │                                          276.55 ms │     no change │
│ QQuery 78 │   607.73 ms │                                          606.96 ms │     no change │
│ QQuery 79 │   325.00 ms │                                          318.10 ms │     no change │
│ QQuery 80 │   511.64 ms │                                          500.38 ms │     no change │
│ QQuery 81 │    51.98 ms │                                           57.75 ms │  1.11x slower │
│ QQuery 82 │   286.36 ms │                                          271.40 ms │ +1.06x faster │
│ QQuery 83 │    79.55 ms │                                           81.08 ms │     no change │
│ QQuery 84 │    65.63 ms │                                           79.18 ms │  1.21x slower │
│ QQuery 85 │   218.41 ms │                                          260.22 ms │  1.19x slower │
│ QQuery 86 │    57.97 ms │                                           64.96 ms │  1.12x slower │
│ QQuery 87 │   163.54 ms │                                          199.90 ms │  1.22x slower │
│ QQuery 88 │   305.85 ms │                                          292.81 ms │     no change │
│ QQuery 89 │   168.29 ms │                                          162.44 ms │     no change │
│ QQuery 90 │    47.29 ms │                                           45.49 ms │     no change │
│ QQuery 91 │    93.16 ms │                                          120.40 ms │  1.29x slower │
│ QQuery 92 │    87.46 ms │                                           80.62 ms │ +1.08x faster │
│ QQuery 93 │   293.67 ms │                                          288.37 ms │     no change │
│ QQuery 94 │    91.99 ms │                                           88.70 ms │     no change │
│ QQuery 95 │   260.20 ms │                                          245.08 ms │ +1.06x faster │
│ QQuery 96 │   120.57 ms │                                          108.70 ms │ +1.11x faster │
│ QQuery 97 │   205.86 ms │                                          193.02 ms │ +1.07x faster │
│ QQuery 98 │   214.04 ms │                                          208.70 ms │     no change │
│ QQuery 99 │ 15777.95 ms │                                        15853.32 ms │     no change │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 52215.10ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 52619.48ms │
│ Average Time (HEAD)                                               │   527.43ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   531.51ms │
│ Queries Faster                                                    │         15 │
│ Queries Slower                                                    │         18 │
│ Queries with No Change                                            │         66 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘

@Dandandan
Copy link
Contributor Author

run benchmark tpcds

@alamb-ghbot
Copy link

🤖 ./gh_compare_branch.sh gh_compare_branch.sh Running
Linux aal-dev 6.14.0-1018-gcp #19~24.04.1-Ubuntu SMP Wed Sep 24 23:23:09 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
Comparing parquet-morsel-driven-execution-237164415184908839 (e31bf97) to 6713439 diff using: tpcds
Results will be posted here when complete

@alamb-ghbot
Copy link

🤖: Benchmark completed

Details

Comparing HEAD and parquet-morsel-driven-execution-237164415184908839
--------------------
Benchmark tpcds_sf1.json
--------------------
┏━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ Query     ┃        HEAD ┃ parquet-morsel-driven-execution-237164415184908839 ┃        Change ┃
┡━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ QQuery 1  │    71.32 ms │                                           71.49 ms │     no change │
│ QQuery 2  │   232.48 ms │                                          244.51 ms │  1.05x slower │
│ QQuery 3  │   157.86 ms │                                          153.46 ms │     no change │
│ QQuery 4  │  1853.97 ms │                                         1940.92 ms │     no change │
│ QQuery 5  │   263.64 ms │                                          257.63 ms │     no change │
│ QQuery 6  │  1437.07 ms │                                         1282.76 ms │ +1.12x faster │
│ QQuery 7  │   515.78 ms │                                          514.03 ms │     no change │
│ QQuery 8  │   176.15 ms │                                          171.16 ms │     no change │
│ QQuery 9  │   310.73 ms │                                          308.53 ms │     no change │
│ QQuery 10 │   175.70 ms │                                          173.50 ms │     no change │
│ QQuery 11 │  1277.13 ms │                                         1289.70 ms │     no change │
│ QQuery 12 │    69.56 ms │                                           66.86 ms │     no change │
│ QQuery 13 │   551.44 ms │                                          580.98 ms │  1.05x slower │
│ QQuery 14 │  1955.53 ms │                                         1909.64 ms │     no change │
│ QQuery 15 │    30.35 ms │                                           29.19 ms │     no change │
│ QQuery 16 │    68.89 ms │                                           64.66 ms │ +1.07x faster │
│ QQuery 17 │   374.53 ms │                                          359.51 ms │     no change │
│ QQuery 18 │   200.60 ms │                                          227.98 ms │  1.14x slower │
│ QQuery 19 │   226.86 ms │                                          218.26 ms │     no change │
│ QQuery 20 │    24.25 ms │                                           23.56 ms │     no change │
│ QQuery 21 │    36.64 ms │                                           36.03 ms │     no change │
│ QQuery 22 │   699.72 ms │                                          757.78 ms │  1.08x slower │
│ QQuery 23 │  1853.57 ms │                                         2183.01 ms │  1.18x slower │
│ QQuery 24 │   678.42 ms │                                          687.14 ms │     no change │
│ QQuery 25 │   534.88 ms │                                          517.60 ms │     no change │
│ QQuery 26 │   126.67 ms │                                          132.08 ms │     no change │
│ QQuery 27 │   503.86 ms │                                          515.60 ms │     no change │
│ QQuery 28 │   331.99 ms │                                          333.04 ms │     no change │
│ QQuery 29 │   473.82 ms │                                          451.03 ms │     no change │
│ QQuery 30 │    75.44 ms │                                           78.55 ms │     no change │
│ QQuery 31 │   320.89 ms │                                          345.70 ms │  1.08x slower │
│ QQuery 32 │    84.76 ms │                                           80.58 ms │     no change │
│ QQuery 33 │   214.73 ms │                                          205.84 ms │     no change │
│ QQuery 34 │   160.19 ms │                                          153.05 ms │     no change │
│ QQuery 35 │   175.23 ms │                                          205.09 ms │  1.17x slower │
│ QQuery 36 │   284.22 ms │                                          299.83 ms │  1.05x slower │
│ QQuery 37 │   253.86 ms │                                          245.71 ms │     no change │
│ QQuery 38 │   155.18 ms │                                          194.46 ms │  1.25x slower │
│ QQuery 39 │   196.55 ms │                                          192.16 ms │     no change │
│ QQuery 40 │   189.20 ms │                                          183.14 ms │     no change │
│ QQuery 41 │    27.52 ms │                                           29.86 ms │  1.08x slower │
│ QQuery 42 │   148.72 ms │                                          146.06 ms │     no change │
│ QQuery 43 │   131.22 ms │                                          123.34 ms │ +1.06x faster │
│ QQuery 44 │    27.95 ms │                                           27.33 ms │     no change │
│ QQuery 45 │    87.62 ms │                                           87.24 ms │     no change │
│ QQuery 46 │   326.97 ms │                                          316.50 ms │     no change │
│ QQuery 47 │  1082.22 ms │                                         1037.26 ms │     no change │
│ QQuery 48 │   417.78 ms │                                          441.73 ms │  1.06x slower │
│ QQuery 49 │   380.38 ms │                                          369.13 ms │     no change │
│ QQuery 50 │   350.53 ms │                                          358.03 ms │     no change │
│ QQuery 51 │   328.39 ms │                                          315.23 ms │     no change │
│ QQuery 52 │   148.36 ms │                                          143.10 ms │     no change │
│ QQuery 53 │   147.11 ms │                                          144.24 ms │     no change │
│ QQuery 54 │   209.17 ms │                                          201.71 ms │     no change │
│ QQuery 55 │   150.73 ms │                                          142.59 ms │ +1.06x faster │
│ QQuery 56 │   210.42 ms │                                          207.99 ms │     no change │
│ QQuery 57 │   291.73 ms │                                          280.76 ms │     no change │
│ QQuery 58 │   509.23 ms │                                          506.39 ms │     no change │
│ QQuery 59 │   326.06 ms │                                          331.58 ms │     no change │
│ QQuery 60 │   217.29 ms │                                          210.10 ms │     no change │
│ QQuery 61 │   255.49 ms │                                          242.45 ms │ +1.05x faster │
│ QQuery 62 │  1347.41 ms │                                         1342.77 ms │     no change │
│ QQuery 63 │   147.69 ms │                                          144.80 ms │     no change │
│ QQuery 64 │  1154.01 ms │                                         1228.87 ms │  1.06x slower │
│ QQuery 65 │   371.89 ms │                                          347.96 ms │ +1.07x faster │
│ QQuery 66 │   413.16 ms │                                          414.14 ms │     no change │
│ QQuery 67 │   541.35 ms │                                          791.81 ms │  1.46x slower │
│ QQuery 68 │   389.56 ms │                                          372.89 ms │     no change │
│ QQuery 69 │   173.07 ms │                                          172.73 ms │     no change │
│ QQuery 70 │   507.84 ms │                                          498.12 ms │     no change │
│ QQuery 71 │   191.97 ms │                                          187.89 ms │     no change │
│ QQuery 72 │  2224.73 ms │                                         2144.23 ms │     no change │
│ QQuery 73 │   162.50 ms │                                          147.36 ms │ +1.10x faster │
│ QQuery 74 │   880.52 ms │                                          805.36 ms │ +1.09x faster │
│ QQuery 75 │   420.86 ms │                                          407.46 ms │     no change │
│ QQuery 76 │   187.73 ms │                                          180.15 ms │     no change │
│ QQuery 77 │   287.32 ms │                                          284.27 ms │     no change │
│ QQuery 78 │   627.97 ms │                                          596.98 ms │     no change │
│ QQuery 79 │   336.45 ms │                                          323.39 ms │     no change │
│ QQuery 80 │   527.27 ms │                                          509.40 ms │     no change │
│ QQuery 81 │    50.89 ms │                                           53.16 ms │     no change │
│ QQuery 82 │   287.25 ms │                                          270.24 ms │ +1.06x faster │
│ QQuery 83 │    78.61 ms │                                           78.33 ms │     no change │
│ QQuery 84 │    66.56 ms │                                           77.55 ms │  1.17x slower │
│ QQuery 85 │   219.11 ms │                                          257.51 ms │  1.18x slower │
│ QQuery 86 │    58.25 ms │                                           64.85 ms │  1.11x slower │
│ QQuery 87 │   165.68 ms │                                          196.29 ms │  1.18x slower │
│ QQuery 88 │   312.04 ms │                                          290.80 ms │ +1.07x faster │
│ QQuery 89 │   168.08 ms │                                          163.00 ms │     no change │
│ QQuery 90 │    48.25 ms │                                           44.55 ms │ +1.08x faster │
│ QQuery 91 │    98.26 ms │                                          117.27 ms │  1.19x slower │
│ QQuery 92 │    83.30 ms │                                           80.55 ms │     no change │
│ QQuery 93 │   290.05 ms │                                          281.96 ms │     no change │
│ QQuery 94 │    92.64 ms │                                           89.44 ms │     no change │
│ QQuery 95 │   262.31 ms │                                          251.46 ms │     no change │
│ QQuery 96 │   118.51 ms │                                          108.44 ms │ +1.09x faster │
│ QQuery 97 │   204.08 ms │                                          191.74 ms │ +1.06x faster │
│ QQuery 98 │   216.38 ms │                                          211.05 ms │     no change │
│ QQuery 99 │ 15753.77 ms │                                        15937.08 ms │     no change │
└───────────┴─────────────┴────────────────────────────────────────────────────┴───────────────┘
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┓
┃ Benchmark Summary                                                 ┃            ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━┩
│ Total Time (HEAD)                                                 │ 52565.83ms │
│ Total Time (parquet-morsel-driven-execution-237164415184908839)   │ 53014.24ms │
│ Average Time (HEAD)                                               │   530.97ms │
│ Average Time (parquet-morsel-driven-execution-237164415184908839) │   535.50ms │
│ Queries Faster                                                    │         13 │
│ Queries Slower                                                    │         18 │
│ Queries with No Change                                            │         68 │
│ Queries with Failure                                              │          0 │
└───────────────────────────────────────────────────────────────────┴────────────┘

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

common Related to common crate core Core DataFusion crate datasource Changes to the datasource crate documentation Improvements or additions to documentation execution Related to the execution crate physical-expr Changes to the physical-expr crates proto Related to proto crate sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Introduce morsel-driven Parquet scan

6 participants